#include "head.h"

void Printf_User(FlightSystem Flight_sys)
{
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    S_List_print(list);
}

// 余额充值
void Balance_Recharge(FlightSystem Flight_sys, U_data data)
{
    // 通过数据确定是那一条，通过名字在这条表上面找到结点
    U_node *find_data = S_List_find_name(By_Data_Judge_List(Flight_sys, data), data.name);
    printf("当前用户:%s 余额:%d\n", find_data->data.name, find_data->data.value);

    printf("请输入你要充值的余额\n");
    int value;

    scanf("%d", &value);
    find_data->data.value += value;

    printf("添加成功\n");
    printf("当前用户:%s 余额:%d\n", find_data->data.name, find_data->data.value);
    Press_Enter_To_Continue();
}

// 查看航班
void Check_Flight(F_list *list)
{
    D_List_print(list);
    Press_Enter_To_Continue();
}

void Change_Password(FlightSystem Flight_sys, U_data data)
{
    // 通过数据确定是那一条，通过名字在这条表上面找到结点
    U_node *find_data = S_List_find_name(By_Data_Judge_List(Flight_sys, data), data.name);
    printf("当前用户:%s 密码:%s\n", find_data->data.name, find_data->data.passwd);

    printf("请输入你要修改的密码\n");
    scanf("%s", find_data->data.passwd);
    printf("修改成功\n");
    printf("当前用户:%s 密码:%s\n", find_data->data.name, find_data->data.passwd);
    Press_Enter_To_Continue();
}

// 用户购票
void User_ticket_purchase(FlightSystem Flight_sys, U_data log_data, S_arr_list *ticket_list)
{
    // 打印航班信息
    D_List_print(Flight_sys.Flight_list);

    puts("请选择你需要购买的班次:");
    int id;
    scanf("%d", &id);
    system("clear");

    // 打印用户需要购买的班次信息
    F_node *ptr = D_List_find_id(Flight_sys.Flight_list, id);
    printf("班次    机型        起点站  终点站  起飞时间    到达时间    飞行时间    票价  载客量  剩余座位  是否飞\n");
    printf("--------------------------------------------------------------------------------------------------\n");
    printf("%-6d", ptr->data.id);
    printf("%-15s", ptr->data.flighttype);
    printf("%-10s", ptr->data.startcity);
    printf("%-10s", ptr->data.arrivecity);
    printf("%02d:%02d\t", ptr->data.starttime[0], ptr->data.starttime[1]);
    printf("%02d:%02d\t    ", ptr->data.arrivetime[0], ptr->data.arrivetime[1]);
    printf("%-10s\t", ptr->data.flytime);
    printf("%-6d", ptr->data.value);
    printf("%-8d", ptr->data.maxNUM);
    printf("%-8d  ", ptr->data.leftbuyersa);
    printf("%c\n", ptr->data.whetherfly);

    //通过用户名字来找到用户结点
    U_node * user_data = S_List_find_name(By_Data_Judge_List(Flight_sys, log_data), log_data.name);
    //判断折扣
    double discount = By_Data_Judge_Discount(log_data);

    printf("当前余额:%d\n", user_data->data.value);

    if(ptr->data.value * discount > user_data->data.value)
    {
        puts("余额不足");
        Press_Enter_To_Continue();
        return;
    }
    if(ptr->data.leftbuyersa <= 0)
    {
        puts("暂无座位");
        Press_Enter_To_Continue();
        return;
    }
    //座位减
    ptr->data.leftbuyersa--;
    
    //扣钱
    user_data->data.value -= ptr->data.value * discount; 


    S_Arr_insert(ticket_list, 1, ptr->data);
    strcpy(ticket_list->name[ticket_list->len - 1].buf, log_data.name);

    // S_Arr_W_File_print(ticket_list); //写入到文件
    puts("购票成功");
    printf("购票后余额%d\n", user_data->data.value);
    Press_Enter_To_Continue();
}

// 遍历当前用户订单
void Iterate_current_user(S_arr_list *L, U_data data)
{
    for (int i = 0; i < L->len; i++)
    {
        if (0 == strcmp(L->name[i].buf, data.name))
        {
            puts("你的订单信息如下");
            printf("用户名:%s  班次:%d  机型:%s  起点站:%s  终点站:%s  起飞时间:%02d:%02d  到达时间:%02d:%02d  飞行时间:%s  票价:%d  载客量:%d  剩余座位:%d  是否飞:%c\n",
                   L->name[i].buf, L->data[i].id, L->data[i].flighttype, L->data[i].startcity, L->data[i].arrivecity,
                   L->data[i].starttime[0], L->data[i].starttime[1], L->data[i].arrivetime[0], L->data[i].arrivetime[1],
                   L->data[i].flytime, L->data[i].value, L->data[i].maxNUM, L->data[i].leftbuyersa, L->data[i].whetherfly);
        }
    }
    return;
}

// 用户退票
void User_refund_ticket(FlightSystem Flight_sys, U_data log_data, S_arr_list * ticket)
{
    Iterate_current_user(ticket, log_data);
    //通过用户名字来找到用户结点
    U_node * user_data = S_List_find_name(By_Data_Judge_List(Flight_sys, log_data), log_data.name);
    //判断折扣
    double discount = By_Data_Judge_Discount(log_data);
    puts("请选择你需要退的的班次:");
    int id;
    int flag = 0; //来标记用户是否邮票
    scanf("%d", &id);
    // 遍历用户航班信息表
    for (int i = 0; i < ticket->len; i++)
    {
        // 当前用户与输入退票班次都相等时 删除此项信息
        if ( (0 == strcmp(log_data.name, ticket->name[i].buf)))
        {
            flag = 1;
            if(ticket->data[i].id == id)
            {
                user_data->data.value += ticket->data[i].value * discount;
                S_Arr_delete(ticket, i + 1);
                puts("退票成功");
                printf("购票后余额%d\n", user_data->data.value);
                Press_Enter_To_Continue();
                return;
            }
        }
    }
    if(flag)
    {
        puts("您还没有购票");
        Press_Enter_To_Continue();
        return;
    }

    puts("无此航班");
    Press_Enter_To_Continue();
}